home *** CD-ROM | disk | FTP | other *** search
- /*********** EXCEPT.C COPYRIGHT 1990 GREGORY COLVIN ************
- This program may be distributed free with this copyright notice.
- ***************************************************************/
- #include <stdio.h>
- #include <string.h>
-
- #define XDEBUG
-
- #include "except.h"
-
- X_TRAP *X_Trap = 0;
- XCEPTION X_Error = 0;
- volatile sig_atomic_t X_Signal;
- char *X_Assert;
-
- void X_TrapError( void )
- {
- if (X_Error) {
- if (X_Trap)
- longjmp(X_Trap->context,X_Error);
-
- if (X_Error == X_ERRNO)
- fprintf(stderr,"C run-time libary error: %s\n",
- strerror(errno));
- else if (X_Error == X_SIGNAL)
- fprintf(stderr,"Signal raised: %d\n",
- (int)X_Signal);
- else if (X_Error == X_ASSERT)
- fprintf(stderr,"Assertion false: %s\n",
- X_Assert);
- else if (X_Error == X_SYSTEM)
- fprintf(stderr,"System call failed.\n");
- else
- fprintf(stderr,"Exception not handled.\n");
- exit(EXIT_FAILURE);
- }
- }
-
- void X_HandleSignal( int sig )
- {
- signal( sig, X_HandleSignal );
- X_Signal = sig;
- longjmp(X_Trap->context,X_SIGNAL);
- }
-
- void X_ReturnSignal( int sig )
- {
- signal( sig, X_ReturnSignal );
- X_Signal = sig;
- }
-